新增表單最後一部份的內容,包含主鍵欄位、系統欄位、欄位預設值(區分成設計期與執行期定義的預設值)。
<主鍵>
為了要將主鍵欄位置於新增表單的一開始,所以需要先取出 Entity 所有主鍵欄位,再依據定義顯示欄位表單。
選取所有主鍵
一般情況,每個 Entity 都應該有1個主鍵,而且只有1個主鍵,但是實際情況可能是沒有設定主鍵,或是複合主鍵。沒有主鍵,要如何準確定義修刪的資料是那一筆,這會是個問題,所以暫且限定所有的 Entity 都有設定主鍵。在完美的情況下,Entity 都只會有1個主鍵欄位,可以從 Entity.KeyColumn 屬性取得定義,但是在開發共用的後台時,就得改用另一個屬性 KeyColumns,以取得主鍵定義集合。
IEntity schema = EntityCache.Get(EntityName);
schema.KeyColumn; // 單一主鍵
schema.KeyColumns; // 複合主鍵
顯示表單
主鍵在新增表單裡,可以暫且視同其他欄位的處理方式,後續說明再進行細節處理。
<系統欄位>
Entity 欄位使用 ColumnVisualAttribute 設定表單顯示定義,定義時傳入 VisualFlag 位元旗標列舉,可以設定的情況如下:
ShowBulkEdit -- 顯示於批次修改表單
HideInAdd -- 不顯示於新增表單
HideInModify -- 不顯示於修改表單
HideInList -- 不顯示於列表
SystemColumn -- 不顯示於新增修改表單與列表
例如 ObjectEntity.LastModifiedDate 欄位的定義
[DataMember]
[Category(DataConstants.Entity.Category)]
[ColumnSpec(LAST_MODIFIED_DATE)]
[ColumnInitiate(InitiateValue.Date17AutoUpdate)]
[ColumnVisual(VisualFlag.SystemColumn)] // 設定表單顯示定義
[IgnoreDiff]
public DateTime LastModifiedDate { get; set; }
<欄位預設值>
Entity 欄位使用 ColumnInitiate 於設計期設定欄位預設值,如果沒有設定,執行期就會依據 .Net 的資料型態預設值與欄位資料定義是否為 nullable,決定預設值。另外一個部份是依據執行期的需要,由新增表單本身,或是前一個網頁的指定,為特定欄位給定預設值,這部份的處理與修改表單有關,就留待後面再說。